import helpers

class Gene:  # Cada cidade é um gene. Genes compõem indivíduos. Indivíduos compõem populações. Populações compõem gerações.
    
    __distances_table = {} # Salvaremos distâncias já consultadas em uma lista para maior desempenho em buscas posteriores.

    def __init__(self, name, id): # Construtor
        self.name = name
        self.id = id

    """
    Retorna distância do gene (cidade) atual em relação a qualquer outra.
    """
    def get_distance_to(self, dest):
        origin = self.id
        dest = dest.id

        forward_key = str(origin) + str(dest)
        backward_key = str(dest) + str(origin)

        if forward_key in Gene.__distances_table:
            # print("Dist de {} a {}: {}".format(origin, dest, Gene.__distances_table[forward_key]))
            return Gene.__distances_table[forward_key]

        if backward_key in Gene.__distances_table:
            # print("Dist de {} a {}: {}".format(origin, dest, Gene.__distances_table[backward_key]))
            return Gene.__distances_table[backward_key]

        dist = helpers.read()[dest-1][origin-1]
        # print("Dist de {} a {}: {}".format(origin, dest, dist))
        Gene.__distances_table[forward_key] = dist

        return dist
